package com.seata.order.service;

import com.seata.order.mapper.OrderMapper;
import com.seata.order.remote.StockClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/****************************************************
 *
 * @author lbf
 * @date 2025/7/15 16:18
 ****************************************************/
@Service
public class OrderServiceImpl implements OrderService{

    @Autowired
    private StockClient stockClient;
    @Autowired
    private OrderMapper orderMapper;

    @Override
    public void create() {

        try{
            //扣库存
            stockClient.decrement();

            /**
             * 模拟异常，Debug模式下 观察 数据库 seata-order 中表 undo_log 中数据的变化情况
             * 表undo_log 是一个临时表，存储数据更新之前的数据，用于出现异常时数据回滚；
             * 当全局事务提交后，undo_log 中的数据会被删除
             * undo_log 表中临时数据如下：
             3	4080933531882553378	192.168.43.123:8091:4080933531882553376	serializer=jackson	(BLOB) 1.11 KB	0	2025-07-15 08:59:49	2025-07-15 08:59:49
             */
            //生成订单
            orderMapper.create();

            int a = 1/0;
        }catch (Exception e){
            /**
             * 在 try...catch... 处理了异常，异常不抛出
             * 若 在 order service 中处理了异常（即异常不抛出），则 order 和 stock 的事务都不会回滚，都会正常提交事务
             */
            //System.out.println(" oder service 发生了异常");

            throw new RuntimeException("oder service 发生了异常");
        }

    }
}
